package day23;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

/**
 * 需求:
 * 定义一个应用程序,用于接收UDP协议传输的数据并处理的
 * 思路:
 * 1.定义UDP socket服务。通常会监听一个端口。
 *   其实就是给这个接收网络应用程序定义数字标识。
 *   方便于明确哪些数据发送过来该程序能处理
 * 2.定义一个数据包，因为要存储接收到的字节数据。
 *   因为数据包对象中有更多功能可以提前字节数据中的不同数据信息
 * 3.通过socket服务的receive方法将收到的数据存入已定义好的数据包中
 * 4.通过数据包对象的特有功能，将这些不同的数据取出，打印在控制台上
 * 5.关闭资源    
 */

/**
 *
 * UdpReceive.java
 * @author wangbiao<br/>
 *         email:785497344@qq.com
 * @description UDP的接收端
 * @since 1.0.0
 * @date 2013-7-3下午11:45:02
 *
 */
public class UdpReceive {

	public static void main(String[] args) {
		DatagramSocket ds = null;
		try {
			//1.创建接收端
			ds = new DatagramSocket(1000);
			//2.定义存储数据的数据包，
			byte[] buf = new byte[1024];
			DatagramPacket dp = new DatagramPacket(buf, buf.length);
			//3.receive方法接收数据
			ds.receive(dp);
			//4.打印到控制台
			String ip = dp.getAddress().getHostAddress();
			String data = new String(dp.getData(),0,dp.getLength());
			int port = dp.getPort();
			System.out.println(ip + "::" + data +"::"+port);
			
		} catch (SocketException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (null != ds) {
				ds.close();
			}
		}
	}
}
